//
//  MainViewController.swift
//  Inpro
//
//  Created by 彭灿 on 16/9/14.
//  Copyright © 2016年 Roble. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        setUpChildControllers()
        
        setupTimer()
    }
    
    /**
     portrait  :   竖屏，肖像
     landscape :   横屏, 风景画
     - 使用代码控制设备的方向, 好处, 可以在需要横屏的时候,单独处理
     - 设置支持的方向之后， 当前的控制器及子控制器都会遵守这个方向!
     - 如果播放视频, 通常都是通过 modal 展现
    */
    
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask{
        return .portrait
    }

}


// MARK: - 时钟相关方法
extension MainViewController {
    
    /// 定时时钟
    public func setupTimer() {
        Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
    }
    
    /// 时钟触发方法
    @objc private func updateTimer() {
        // 测试未读数量
        let randomCount = 10;
        // 设置 首页 tarbar 的badgeNumber
        self.tabBar.items?[0].badgeValue = randomCount > 0 ? "\(randomCount)" : nil
        // 设置 app 的badgeNumber, 从ios8.0 之后，要授权才能显示
        UIApplication.shared.applicationIconBadgeNumber = randomCount
    }
}


/// extension 类似于 OC 中的分类, 在 Swfit 中还可以用来切分代码块
// MARK: - 设置界面
extension MainViewController{
    
    /// 设置所有子控制器
    public func setUpChildControllers() {
        // 0> 获取沙盒 json 路径
        let docDic = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        let jsonPath = (docDic as NSString).appendingPathComponent("main.json")
        
        // 加载data
        var data = NSData(contentsOfFile: jsonPath)
        
        if data == nil {
            // 从 Bundle 加载data
            let path = Bundle.main.path(forResource: "main.json", ofType: nil)
            
            data = NSData(contentsOfFile: path!)
        }
        
        // 这时的 data 一定会有一个内容
        // 反序列化转换成数组
        guard let array = try? JSONSerialization.jsonObject(with: data! as Data, options: []) as? [[String : AnyObject]]
            else {
                return
        }
        
        var arrayM = [UIViewController]()
        for dict in array! {
            arrayM.append(controller(dict: dict))
        }
        
        viewControllers = arrayM
    
    }
    
    /// 使用字典创建子控制器
    ///
    /// - parameter dict: 信息字典[clsName, title, imageName, visitorInfo]
    ///
    /// - returns: 子控制器
    private func controller(dict: [String: AnyObject]) -> UIViewController{
        
        // 1. 取得字典内容
        guard let clsName = dict["clsName"] as? String,
            let title = dict["title"] as? String,
            let imageName = dict["imageName"] as? String,
            let cls = NSClassFromString(Bundle.main.namespace + "." + clsName) as? MainBaseViewController.Type,
            let visitorDict = dict["visitorInfo"] as? [String : String]
            else {
            return UIViewController()
        }
        
        // 2. 创建视图控制器
        // 1> 将 clsName 转换成 cls
        let vc = cls.init()
        vc.title = title
        // 设置控制器的访客信息字典
        vc.visitorInfoDict = visitorDict
        
        // 3. 设置图像
        vc.tabBarItem.image = UIImage(named: "TabBar_" + imageName)
        // 选中后设置新的图片
        vc.tabBarItem.selectedImage = UIImage(named: "TabBar_" + imageName + "_selected")?.withRenderingMode(.alwaysOriginal)
        
        // 4. 设置 tabbar 的标题大小
        vc.tabBarItem.setTitleTextAttributes(
            [NSForegroundColorAttributeName: UIColor.orange],
            for: .highlighted
        )
        // 系统默认是 12号字， 修改字体大小，要设置 Normal 的字体大小
        vc.tabBarItem.setTitleTextAttributes(
            [NSFontAttributeName: UIFont.systemFont(ofSize: 12)],
            for: UIControlState(rawValue: 0)
        )
        
        // 实例化导航控制器的时候，会调用 push 方法将 rootVC 压栈
        let nav = MainNavigationController(rootViewController: vc)
        
        return nav
    }
}
